package com.haust.category.controller;

import com.haust.commons.exception.DaoException;
import com.haust.commons.pojo.HaustResult;
import com.haust.category.service.ContentCategoryService;
import com.haust.pojo.TbContentCategory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@CrossOrigin
public class ContentCategoryController {

    @Autowired
    private ContentCategoryService contentCategoryService;

    /**
     * 根据 parentId 查找 所有的内容分类
     *
     * @param parentId
     * @return
     */
    @PostMapping("/backend/contentCategory/selectContentCategoryByParentId")
    public HaustResult selectContentCategoryByParentId(@RequestParam(value = "id", defaultValue = "0") Long parentId) {
        return contentCategoryService.selectContentCategoryByParentId(parentId);
    }

    /**
     * 新增 内容分类
     * ：
     * 1、完整性处理
     * 2、新增内容分类名称不能为空，同级别的内容分类，不能有同名的正常状态的节点
     * 3、添加到数据库中
     *
     * @param tbContentCategory
     * @return
     */
    @PostMapping("/backend/contentCategory/insertContentCategory")
    public HaustResult insertContentCategory(TbContentCategory tbContentCategory) {

        try {
            return contentCategoryService.insertContentCategory(tbContentCategory);
        } catch (DaoException e) {
            return HaustResult.error("服务忙，请稍后再试！");
        }
    }

    /**
     * 更新 内容分类状态为 已删除
     * ：
     * 1、删除父节点，同时递归删除所有的字节点
     * 2、当父节点的 有效子节点为 0 的时候，设置父节点的isParent=false
     *
     * @param id
     * @return
     */
    @PostMapping("/backend/contentCategory/deleteContentCategoryById")
    public HaustResult deleteContentCategoryById(@RequestParam("id") Long id) {
        try {
            return contentCategoryService.deleteContentCategoryById(id);
        } catch (DaoException e) {
            e.printStackTrace();
            return HaustResult.error(e.getMessage());
        }
    }

    /**
     * 根据id修改 ，内容分类的 name
     * ：
     * 1、修改的 name不能为null 或者 空字符串
     * 2、修改 时候 不能存在 同一 级别正常状态下相同 名字的 name
     *
     * @param id
     * @param name
     * @return
     */
    @PostMapping("/backend/contentCategory/updateContentCategory")
    public HaustResult updateContentCategory(@RequestParam("id") Long id, @RequestParam("name") String name) {
        try {
            return contentCategoryService.updateContentCategory(id, name);
        } catch (DaoException e) {
            e.printStackTrace();
            return HaustResult.error(e.getMessage());
        }
    }
}
